#!/bin/bash
#执行此脚本用户权限要求，有目录 /etc/init.d/ 删除，创建文件权限，有执行 chkconfig 执行权限

#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#centOS 7 以前的版本init.d使用这种方式配置开机自启动服务,
#注意 ++ 此脚本在centOS 7中无法设置为开机自启动，未找到原因。坑，无来由的又好了。centos 7下慎用吧
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#获取此脚本所在的目录位置
CURR_DIR_PATH="$(cd "$(dirname $0)/"; pwd)"
#获取目录的名称，目录名称即程序打包的名称
CURR_APP_NAME="${CURR_DIR_PATH##*/}"
#CURR_APP_NAME="cloud-eureka-server"
#组装当前服务jar文件绝对路径
CURR_APP_NAM_PATH=$CURR_DIR_PATH/$CURR_APP_NAME".jar"
#CURR_APP_NAM_PATH="/usr/local/server/cloud-eureka-server/cloud-eureka-server.jar"

INIT_D_SERVER_STR="#!/bin/bash

#必须配置。表示缺省启动的运行级别以及启动和停止的优先级，如该服务缺省不再任何运行级启动，则以 - 代替运行级别。
#如下配置表示脚本在运行级2、3、4、5启动，启动优先权为20（优先权数越大服务启动的越晚），停止优先权为80。
#如果服务已经设置好了，通过重新编辑此服务配置文件来修改启动优先权就不管用了，先删除服务再添加进来就可以了。
# chkconfig: 2345 20 80


# description: $CURR_APP_NAME

#export JAVA_HOME=/usr/java/jdk1.8.0_141
#export CLASS_PATH=/usr/java/jdk1.8.0_141/lib
#export PATH=$JAVA_HOME/bin:$PATH

#export JAVA_HOME=/usr/local/jdk1.8.0_60
##检查JAVA_HOME变量是否存在
#if [ -z \$JAVA_HOME ]; then
#        echo \"Error: JAVA_HOME environment variable is not set..\"
#        exit 1
#fi
#
##自定义java运行程序路径(直接定义的变量无法传递到server.sh 脚本中,所以改用环境变量传递)
#export _RUNJAVA=$JAVA_HOME/jre/bin/java

#设置返回值，shell中返回0表示调用正常，其他为失败
RETVAL=0

start(){
        $CURR_DIR_PATH/server.sh start
        #nohup /usr/bin/java $JAVA_OPTS -jar  $CURR_APP_NAM_PATH > $CURR_DIR_PATH/$CURR_APP_NAME.out 2>&1 &
        #nohup /usr/java/jdk1.8.0_141/jre/bin/java $JAVA_OPTS -jar  $CURR_APP_NAM_PATH > $CURR_DIR_PATH/$CURR_APP_NAME.out 2>&1 &
        #nohup /usr/local/jdk1.8.0_60/jre/bin/java $JAVA_OPTS -jar  $CURR_APP_NAM_PATH > $CURR_DIR_PATH/$CURR_APP_NAME.out 2>&1 &
        # \$? 显示最后命令的退出状态。0表示没有错误，其他任何值表明有错误
        RETVAL=\$?
        return \$RETVAL
}

status(){
        $CURR_DIR_PATH/server.sh status
        # \$? 显示最后命令的退出状态。0表示没有错误，其他任何值表明有错误
        RETVAL=\$?
        return \$RETVAL
}

stop(){
        $CURR_DIR_PATH/server.sh stop
        # \$? 显示最后命令的退出状态。0表示没有错误，其他任何值表明有错误
        RETVAL=\$?
        return \$RETVAL
}

restart(){
        $CURR_DIR_PATH/server.sh restart
        # \$? 显示最后命令的退出状态。0表示没有错误，其他任何值表明有错误
        RETVAL=\$?
        return \$RETVAL
}


case \"\$1\" in
 start)
        start
        ;;
 status)
        status
        ;;
 stop)
        stop
        ;;

 restart)
        restart
         ;;
 *)
        echo \"Usage: \$0 {start|status|stop|restart}\"
        exit 1
        ;;
esac

exit \$RETVAL
"

#"${INIT_D_SERVER_STR}" 用法保留字符串中的换行符
echo  "$CURR_APP_NAME SERVER INFO: ${INIT_D_SERVER_STR}"

#检查服务依赖的 server.sh 文件是否存，是否有执行权限
if [ ! -f $CURR_DIR_PATH/server.sh ]; then
    echo "$CURR_DIR_PATH/server.sh  file not found."
    exit 1
fi

if [ ! -x $CURR_DIR_PATH/server.sh ]; then
    chmod 751 $CURR_DIR_PATH/server.sh
    if [ $? -gt 0 ]; then
        #echo "$CURR_DIR_PATH/server.sh has no execute permission."
        exit 1
    fi
fi

#保存生成的服务配置文件
echo  "${INIT_D_SERVER_STR}" > $CURR_APP_NAME

#指定保存服务文件位置
SERVICE_PATH="/etc/init.d/"$CURR_APP_NAME
#如果文件已存在，删除文件
if [ -f "$SERVICE_PATH" ]
then
    chkconfig $CURR_APP_NAME off
    chkconfig  --del  $CURR_APP_NAME

    echo "rm  $SERVICE_PATH"
    rm -f $SERVICE_PATH
      if [ $? -gt 0 ]; then
          echo "$SERVICE_PATH can not be deleted."
          exit 1
      fi
fi

#复制到指定服务配置目录
cp $CURR_APP_NAME  $SERVICE_PATH
if [ $? -gt 0 ]; then
  echo "You can not copy $CURR_APP_NAME from $CURR_DIR_PATH/$CURR_APP_NAME to $SERVICE_PATH."
  exit 1
fi

#设置文件用户组信息
#chown root:root $SERVICE_PATH

#文件权限 读(4)、写(2)、执行(1)的权限
chmod 755 $SERVICE_PATH

#将APP添加到服务中
#增加一项新的服务。chkconfig确保每个运 行级有一项启动(S)或者杀死(K)入口。如有缺少，则会从缺省的init脚本自动建立。
chkconfig --add $CURR_APP_NAME

#配置开机自启动
chkconfig $CURR_APP_NAME on



#配置好后，就可以通过服务的方式启动程序
# 启动APP服务
#service cloud-eureka-server start
# 停止APP服务
#service cloud-eureka-serverE stop
# 重启APP服务
#service cloud-eureka-server restart
#查看服务状态
#service cloud-eureka-server status


#显示所有运行级系统服务的运行状态信息（on或off）。 如果指定了name，那么只显示指定的服务在不同运行级的状态。
# chkconfig  --list
#centos 7 查询服务是否开机启动
#systemctl is-enabled .service

#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#删除服务操作
#首先将服务开机自启动关掉
#chkconfig cloud-eureka-server off
#删除服务，(会自动把相关符号连接从/etc/rc[0-6].d删 除)
#chkconfig  --del  cloud-eureka-server
#删除之前配置的服务文件
#rm -f /etc/init.d/cloud-eureka-server
#rm -f /etc/rc.d/init.d/cloud-eureka-server